package ar.com.age.distribuidora.service.impl;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import ar.com.age.distribuidora.dao.EntregaChequeDao;
import ar.com.age.distribuidora.dao.EntregaEfectivoDao;
import ar.com.age.distribuidora.dominio.EntregaCheque;
import ar.com.age.distribuidora.dominio.EntregaEfectivo;
import ar.com.age.distribuidora.service.EntregaService;

public class EntregaServiceImpl implements EntregaService {

	private EntregaEfectivoDao entregaEfectivoDao;
	
	private EntregaChequeDao entregaChequeDao;
	
	@Autowired(required = true)
	public void setEntregaEfectivoDao(EntregaEfectivoDao entregaEfectivoDao) {
		this.entregaEfectivoDao = entregaEfectivoDao;
	}
    
    @Autowired(required = true)
	public void setEntregaChequeDao(EntregaChequeDao entregaChequeDao) {
		this.entregaChequeDao = entregaChequeDao;
	}
    
    // Entrega Efectivo
    @Override
	public void crearOEditarEntregaEfectivo(EntregaEfectivo entregaEfectivo) {
    	
    	// Para cuando aclualizo la entrega...
    	if (entregaEfectivo.getMontoActual() == 0.0) {
    		
			entregaEfectivo.setEstado("Agotada");
		} else {
			entregaEfectivo.setEstado("Disponible");
		}

    	entregaEfectivoDao.saveOrUpdate(entregaEfectivo);		
	}

	@Override
	public List<EntregaEfectivo> buscarTodosEntregaEfectivo() {

		return entregaEfectivoDao.getAll();
	}
	
	@Override
	public void eliminarEntregaEfectivo(EntregaEfectivo entregaEfectivo) {
		
		entregaEfectivoDao.physicalDelete(entregaEfectivo);
	}
	
	@Override
	public List<EntregaEfectivo> buscarEntregaEfectivo(String codigo, String estado, Date desde, Date hasta, String cliente) {

		return entregaEfectivoDao.find(codigo, estado, desde, hasta, cliente);
	}
	
	// Entrega Cheque
	@Override
	public void crearOEditarEntregaCheque(EntregaCheque entregaCheque) {
				
		// Para cuadno registro seteo el Monto Inicial y Actual de la entrega con el monto del cheque 
		if (entregaCheque.getId() == null) {
			
			entregaCheque.setMontoInicial(entregaCheque.getCheque().getMonto());
			entregaCheque.setMontoActual(entregaCheque.getCheque().getMonto());
		}
		
		// Para cuando aclualizo la entrega...
		if (entregaCheque.getMontoActual() == 0.0) {
			entregaCheque.setEstado("Agotada");
		} else {
			entregaCheque.setEstado("Disponible");
		}
				
    	entregaChequeDao.saveOrUpdate(entregaCheque);		
	}

	@Override
	public List<EntregaCheque> buscarTodosEntregaCheque() {

		return entregaChequeDao.getAll();
	}
	
	@Override
	public void eliminarEntregaCheque(EntregaCheque entregaCheque) {
		
		entregaChequeDao.physicalDelete(entregaCheque);
	}
	
	@Override
	public List<EntregaCheque> buscarEntregaCheque(String codigo, String estado, Date desde, Date hasta, String cliente) {

		return entregaChequeDao.find(codigo, estado, desde, hasta, cliente);
	}
	
}
